home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 1
/
Nebula One.iso
/
Internet
/
WWW
/
httpd_1.5.export
/
support
/
inc2shtml.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-11-09
|
3KB
|
109 lines
/*
* inc2shtml: Convert httpd <1.1 style includes to 1.2 style
*
* Rob McCool
*
* Usage: inc2shtml [filename]
*
* If filename is given, this program will open filename. If not, it will
* look on stdin. It will output the new shtml file on stdout.
*/
#include "config.h"
#include "portability.h"
#include <stdio.h>
#ifndef NO_STDLIB_H
# include <stdlib.h>
#endif /* NO_STDLIB_H */
#include <ctype.h>
#define MAX_STRING_LEN 256
void usage(char *argv0) {
fprintf(stderr,"Usage: %s [filename]\n",argv0);
fprintf(stderr,"If filename is given, this program will open filename.\n");
fprintf(stderr,"If not, it will look on stdin for the inc file.\n");
fprintf(stderr,
"In either case, it will write the new shtml file on stdout.\n");
exit(1);
}
void translate_tag(char *tag, FILE *fd) {
char *tp = tag, *tp2;
int url;
url = (*tp == 'U' || *tp == 'u' ? 1 : 0);
while(*tp++ != '\"');
tp2 = tp + 1;
while(*tp2 != '\"') ++tp2;
*tp2 = '\0';
if(*tp == '|') {
fprintf(fd,"<!--#exec cmd=\"%s",++tp);
if(url) fputs(" '$QUERY_STRING_UNESCAPED'",fd);
fputs("\"-->",fd);
} else
fprintf(fd,"<!--#include virtual=\"%s\"-->",tp);
}
main(int argc, char *argv[]) {
FILE *f;
int c,x,p;
char c2;
char *lookfor = "<inc srv";
switch(argc) {
case 1:
f = stdin;
break;
case 2:
if(!(f = fopen(argv[1],"r"))) {
perror("fopen");
exit(1);
}
break;
default:
usage(argv[0]);
}
p=0;
while(1) {
c = fgetc(f);
if(c == -1) {
fflush(stdout);
exit(0);
}
c2 = (char)c;
if(isalpha((char)c))
c = tolower((char)c);
if(c == lookfor[p]) {
if(!lookfor[++p]) {
char tag[MAX_STRING_LEN];
x=0;
c = fgetc(f); /* get space */
while(c != '>') {
tag[x++] = c;
c = fgetc(f);
if(c == -1) {
fputs("<inc srv ",stdout);
fputs(tag,stdout);
fflush(stdout);
exit(1);
}
}
tag[x] = '\0';
translate_tag(tag,stdout);
p = 0;
}
}
else {
for(x=0;x<p;x++)
fputc(lookfor[x],stdout);
fputc(c2,stdout);
p=0;
}
}
}